﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RouterControl.IO.UPnP;

namespace RouterControlTest
{
	/// <summary>
	/// Summary description for DeviceDomDb
	/// </summary>
	[TestClass]
	public class DeviceDomDb
	{
		public DeviceDomDb()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		private TestContext testContextInstance;

		/// <summary>
		///Gets or sets the test context which provides
		///information about and functionality for the current test run.
		///</summary>
		public TestContext TestContext
		{
			get
			{
				return testContextInstance;
			}
			set
			{
				testContextInstance = value;
			}
		}

		#region Additional test attributes
		//
		// You can use the following additional attributes as you write your tests:
		//
		// Use ClassInitialize to run code before running the first test in the class
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Use ClassCleanup to run code after all tests in a class have run
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Use TestInitialize to run code before running each test 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Use TestCleanup to run code after each test has run
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//
		#endregion

		[TestMethod]
		public void SearchAndAdd()
		{
			var finder = new UPnPDeviceFinderClass();
			var db = new RouterControl.Db.DeviceDomDbConnector();

			var devices = finder.FindByType(RouterControl.IO.RootDeviceTypeIds.InternetGatewayDeviceType, 0);

			Assert.IsTrue(devices.Count > 0, "no devices found");

			foreach (IUPnPDevice d in devices)
			{
				var ds = new RouterControl.IO.DeviceSchema(d);

				ds.DownloadDeviceDescription();

				// check and add
				if (!db.HasDeviceSchema(ds.SchemaId))
					db.SaveDeviceSchema(ds);
			}
		}

		//[TestMethod]
		public void AddSpecification()
		{
			var db = new RouterControl.Db.DeviceDomDbConnector();

			var ds = RouterControl.IO.Specification.SpecificationManager.Instance.GetFullSpecificationDom(RouterControl.IO.RootDeviceTypeIds.InternetGatewayDeviceType);

			// check and add
			db.SaveDeviceDom(ds);
		}

		[TestMethod]
		public void TestLoadDom()
		{
			// query device dom
			var conn = new RouterControl.Db.DeviceDomDbConnector();

			var dom = conn.LoadDeviceDom("kdshfgefirfe");

			Assert.IsNotNull(dom, "schema id not found");

			Console.WriteLine(dom.ToXml());
		}

		[TestMethod]
		public void ParseAllUnparsedDeviceSchemas()
		{
			var conn = new RouterControl.Db.DeviceDomDbConnector();

			conn.ParseAllUnparsedDeviceSchemas();
		}
	}
}
